home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / util / boot / mclk32.lha / Source / mclk32.s
Text File  |  1999-01-07  |  7KB  |  243 lines

  1.  
  2. ;fixed Values are: a5 -> IntuitionBase
  3. ;                  a4 -> DosBase
  4. ;                  d4 -> window UserPort
  5. ;                  d5 -> ExecBase
  6. ;                  d6 -> window handle
  7. ;                  d7 -> last seconds
  8.  
  9.  
  10. ExecBase    = 4
  11. OpenLib     = -552
  12. CloseLib    = -414
  13. OpenWorkBench = -210
  14. OpenWindow  = -204
  15. CloseWindow = -72
  16. GetMsg      = -372
  17. AvailMem    = -216
  18. SetWindowTitles = -276
  19. Delay       = -198
  20. DateStamp   = -192
  21. FindTask    = -294
  22. SetTaskPri  = -300
  23.  
  24. ;Test68020+
  25.      movea.l ExecBase,a6   ;ExecBase nach a6
  26.      move.l  a6,d5         ;ExecBase nach d5
  27.      btst    #1,$128+1(a6) ;128 = AttnFlags (+1, da Byte-Zugriff)
  28.      bne.b   run           ;Ist CPU >= 68020 vorhanden?
  29.      moveq   #20,d0        ;Fehlercode 20 setzen
  30.      rts                   ;und beenden
  31.  
  32. run
  33.      movea.l #0,a1
  34.      jsr     FindTask(a6)  ;Task-Pointer holen
  35.      movea.l d0,a1
  36.      moveq   #-5,d0
  37.      jsr     SetTaskPri(a6)  ;Task-Priorität setzen
  38.  
  39.      clr.l   d0            ;Version egal
  40.      lea     IntName,a1    ;Name der Intuition-Bibliothek
  41.      jsr     OpenLib(a6)   ;Intuition öffnen
  42.      movea.l d0,a5         ;IntuitionBase retten
  43.  
  44.      clr.l   d0            ;Version egal
  45.      lea     DosName,a1    ;Name der Intuition-Bibliothek
  46.      jsr     OpenLib(a6)   ;dos.library öffnen
  47.      movea.l d0,a4         ;DosBase retten
  48.  
  49. WorkbenchOpen
  50.      movea.l a5,a6         ;IntuitionBase nach a6
  51.      jsr     OpenWorkBench(a6)  ;Hole WorkBenchScreen-Handle
  52.      tst.l   d0
  53.      beq     CloseDos      ;wenn Workbench Screen nicht gefunden
  54.      movea.l d0,a1
  55.      move.w  $0c(a1),d2    ;Screen-Breite nach d2
  56.      subi.w  #375,d2       ;Fenster-X-Position ausrechnen
  57.      move.w  d2,window_defs  ;Fenster-X-Position setzen
  58.  
  59. windopen
  60.      lea     window_defs,a0  ;Zeiger auf Fenster-Definition
  61.      jsr     OpenWindow(a6) ;Fenster öffnen
  62.      move.l  d0,d6         ;Fenster-Handle retten
  63.  
  64. SetScreenTitle
  65.      movea.l d0,a0         ;Fenster-Handle nach a0
  66.      move.l  86(a0),d4     ;User-Port-Zeiger nach d4 für späteren Gebrauch
  67.      movea.l #-1,a1        ;Window-Titel beibehalten
  68.      lea     ScreenTitle,a2
  69.      jsr     SetWindowTitles(a6)
  70.  
  71.      moveq   #-1,d7        ;Sekunden auf ungültig setzen
  72.  
  73. GetCurrentTime
  74.      movea.l a4,a6         ;DosBase nach a6
  75.      move.l  #Time,d1      ;Zeiger auf DateStamp nach d1
  76.      jsr     DateStamp(a6) ;aktuelle Zeit holen
  77. Ticks
  78.      move.l  Time+8,d1     ;Ticks holen
  79.      divu.w  #50,d1        ;Ticks in Sekunden umrechnen
  80.      cmp.b   d7,d1         ;Ist bereits eine Sekunde vergangen?
  81.      beq     Wait          ;wenn nicht, dann warte noch
  82.      move.b  d1,d7         ;Sekunden merken
  83.      swap    d1
  84.      clr.w   d1            ;Divisions-Rest löschen
  85.      swap    d1
  86.      lea     Uhr+6,a0
  87.      divu.w  #10,d1        ;Zehnerstelle berechnen
  88.      jsr     .ziffer
  89.      add.w   #$30,d1       ;in ASCII umwandeln
  90.      move.b  d1,(a0)+      ;schreiben
  91. .Minutes
  92.      move.l  Time+4,d1     ;Minuten holen
  93.      lea     Uhr,a0
  94.      divu.w  #600,d1       ;Zehnerstelle der Stunden berechnen
  95.      jsr     .ziffer
  96.      divu.w  #60,d1        ;Einerstelle der Stunden berechnen
  97.      jsr     .ziffer
  98.      addq    #1,a0         ;Doppelpunkt überspringen
  99.      divu.w  #10,d1        ;Zehnerstelle der Minuten holen
  100.      jsr     .ziffer
  101.      pea     AvailChipMem(pc)  ;schneller als 'jsr .ziffer' + 'jmp AvailChipMem'
  102.  
  103. .ziffer
  104.      add.w   #$30,d1       ;in ASCII umwandeln
  105.      move.b  d1,(a0)+      ;schreiben
  106.      clr.w   d1            ;unteres Wort löschen
  107.      swap    d1            ;Rest nach unten holen
  108.      rts
  109.  
  110. AvailChipMem
  111.      movea.l d5,a6         ;ExecBase nach a6
  112.      moveq.l #2,d1         ;Chip-Ram
  113.      lea     ChipValue,a2  ;Ausgabe-Speicher
  114.      moveq   #4-1,d3       ;Anzahl der Stellen -1
  115.      lea     Pot4,a3
  116.      jsr     GetAvailMem
  117. AvailFastMem
  118.      moveq.l #4,d1         ;Fast-Ram
  119.      lea     FastValue,a2  ;Ausgabe-Speicher
  120.      moveq   #6-1,d3       ;Anzahl der Stellen -1
  121.      lea     Pot6,a3
  122.      jsr     GetAvailMem
  123.      
  124. SetWindowTitle
  125.      movea.l a5,a6         ;IntuitionBase nach a6
  126.      movea.l d6,a0         ;Fenster-Handle nach a0
  127.      lea     windowname,a1
  128.      movea.l #-1,a2        ;Screen-Titel beibehalten
  129.      jsr     SetWindowTitles(a6)
  130.  
  131. Wait
  132.      movea.l a4,a6         ;DosBase nach a6
  133.      moveq.l #10,d1
  134.      jsr     Delay(a6)
  135.  
  136. GetMessage
  137.      movea.l d4,a0         ;User-Port-Zeiger nach a0
  138.      movea.l d5,a6         ;ExecBase nach a6
  139.      jsr     GetMsg(a6)    ;Message holen
  140.      tst.l   d0            ;Prüfen auf Ereignis
  141.      beq     GetCurrentTime
  142.  
  143. windclose
  144.      movea.l a5,a6         ;IntuitionBase nach a6
  145.      movea.l d6,a0         ;Fenster-Handle nach a0
  146.      jsr     CloseWindow(a6)  ;Fenster schließen
  147.  
  148.  
  149. CloseDos
  150.      movea.l d5,a6
  151.      movea.l a4,a1         ;DosBase nach a1
  152.      jsr     CloseLib(a6)
  153. CloseInt
  154.      movea.l a5,a1         ;IntBase nach a1
  155.      jsr     CloseLib(a6)
  156.      rts
  157. ;---------------------------------------------
  158. GetAvailMem
  159.  
  160.      jsr     AvailMem(a6)
  161.      moveq.l #10,d1        ;für Division durch 1024 (->lsr.l #10,d0)
  162.      lsr.l   d1,d0         ;Division durch 1024 - jetzt KByte
  163.  
  164. bin_dez  ;Unterprogramm zur Umwandlung von Binärzahlen in Dezimalzahlen
  165.          ;a2 = Zeiger auf Ausgabespeicher
  166.          ;a3 = Zeiger auf Potenzen
  167.          ;d0 = Umzuwandelnde Zahl
  168.          ;d3 = Anzahl der Stellen -1
  169.          ;d2 = wenn null, dann Leerzeichen statt Null ausgeben
  170.  
  171.      clr.b   d2
  172. .next
  173.      moveq   #'0'-1,d1
  174. .loop
  175.      addq.b  #1,d1
  176.      sub.l   (a3),d0
  177.      bcc     .loop         ;ist die Zahl durch Potenz teilbar ?
  178.      add.l   (a3)+,d0
  179.      cmpi.b  #'0',d1       ;prüfen auf '0'
  180.      bne     .skip1
  181.      tst.b   d2
  182.      bne     .skip2
  183.      moveq   #' ',d1
  184.      jmp     .skip2
  185. .skip1
  186.      moveq   #1,d2
  187. .skip2
  188.      move.b  d1,(a2)+      ;Ziffer ausgeben
  189.      dbf     d3,.next      ;werden weitere Stellen benötigt ?
  190.      rts
  191. ;---------------------------------------------
  192. IntName
  193.      dc.b    'intuition.library',0
  194.  even
  195. DosName
  196.      dc.b    'dos.library',0
  197.  even
  198.  
  199. Pot6 dc.l     100000
  200.      dc.l     10000
  201. Pot4 dc.l     1000
  202.      dc.l     100
  203. Pot2 dc.l     10
  204.      dc.l     1
  205.      
  206.  
  207. window_defs
  208.      dc.w    10            ;X-Position
  209.      dc.w     0            ;Y-Position
  210.      dc.w   353            ;Breite
  211.      dc.w    10            ;Höhe
  212.      dc.b     1            ;Schriftfarbe
  213.      dc.b     3            ;Hintergrundfarbe
  214.      dc.l  $200            ;IDCMP-Flags
  215.      dc.l    $e            ;Flags
  216.      dc.l     0            ;Zeiger auf Gadget-Liste
  217.      dc.l     0            ;Zeiger auf Checkmark-Image
  218.      dc.l windowname       ;Zeiger auf Fenster-Titel
  219.      dc.l     0            ;Zeiger auf Screen-Handle
  220.      dc.l     0            ;Zeiger auf Bitmap
  221.      dc.w     0            ;Mindestbreite
  222.      dc.w     0            ;Mindesthöhe
  223.      dc.w     0            ;maximale Breite
  224.      dc.w     0            ;maximale Höhe
  225.      dc.w     1            ;Screen-Typ
  226.  
  227. windowname
  228.      dc.b     'Chip:'
  229. ChipValue
  230.      dc.b     'xxxx  Fast:'
  231. FastValue
  232.      dc.b     'xxxxxx  Time:'
  233. Uhr
  234.      dc.b     'xx:xx:xx',0
  235.  
  236.      dc.b     '$VER:'
  237. ScreenTitle
  238.      dc.b     'mclk32 1.1 (7.1.99)',0
  239.  even
  240. Time
  241.      dc.l     0,0,0   ;Days,Minutes,Ticks
  242.  
  243.